
# 序列
# 什么叫做序列，我们学过的列表，元组，字符串等一些可迭代的对象都叫做序列
# 对于这些有很多共性的数据结构，有许多的通用方法
# 调用tuple()、list()、str()分别可以将类型进行转换。当然列表转换为元组会自动去重
# sorted()和reversed()方法为序列方法，都通用
# sorted(可迭代对象,key) -key表示的排序方法，如果传入的是len,则是根据字符长度来进行排序
# 一般的一些高级操作都会传入lamba函数自定义排序方法
# reversed返回的是一个可迭代对象，不能够直接表示出来，需要将其转换为列表或者元组


# 枚举类型
# enumerate -将一个序列转换为一个枚举类型的数据结构
seasons = ["spring","summer","fall","winter"]
print(list(enumerate(seasons)))
# 同样enumerate返回的是一个枚举对象，需要将其进行类型转换
# 可选参数start可以设置开始的值，不想要0开始

# zip函数压缩函数，可以将几个可迭代对象每一部分抽取一个出来进行组合
# 同样，返回的是一个迭代器，需要转换类型
a = [1,2,3]
b = [4,5,6]
c = [7,8,9]
print(list(zip(a,b,c)))
# 当长度不一致时会以最小长度的个数为准，不过会丢掉一些值，也有方法可以解决，使用itertools模块中的itertools.zip_longest()

# map函数map(函数,可迭代对象)
# 返回的也是一个迭代器
# 如果函数有多个运算值，可以传入多个序列，直接看例子试着理解
print(list(map(max,[1,2,3],[3,4,5],[2,4,5],[1,2,34,5])))
# 多组求max
print(list(map(pow,(2,3),(2,4))))
# 2**2  3**4
# 函数具有多个操作数

# filter函数-过滤器，返回的是满足条件的迭代器
print(list(filter(str.islower,"Fishc")))


# 迭代器和可迭代对象
# 迭代器是一次性的，只能使用一次，而可迭代对象可以多次使用
# zip,filter,map返回的都是迭代器，只能使用一次，所以一般都转换为list用以接收存储

